﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SerialPrt
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// COM1连接天平  发送String类型数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            // 配置串口参数
            SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);

            try
            {
                // 打开串口
                serialPort.Open();
                Console.WriteLine("串口已打开");

                // 发送指令
                string command = "SI";
                //+ "\r\n"
                byte[] commandBytes = Encoding.ASCII.GetBytes(command + "\r\n"); // 根据天平的指令手册可能需要加上换行符
                serialPort.Write(commandBytes, 0, commandBytes.Length);
                Console.WriteLine($"已发送指令: {command}");

                // 等待天平响应
                Thread.Sleep(3000); // 适当的延时，根据天平的响应时间调整

                // 读取天平返回的数据
                string response = serialPort.ReadExisting();
                Console.WriteLine($"天平返回的数据: {response}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"发生错误: {ex.Message}");
            }
            finally
            {
                // 关闭串口
                if (serialPort.IsOpen)
                {
                    serialPort.Close();
                    Console.WriteLine("串口已关闭");
                }
            }

        }


        /// <summary>
        /// 启动蠕动泵 使用COM11端口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            // 配置串口参数
            SerialPort serialPort = new SerialPort
            {
                PortName = "COM11",
                BaudRate = 9600, // 根据蠕动泵手册设置波特率
                Parity = Parity.Even, // 设置偶校验
                DataBits = 8, // 根据蠕动泵手册设置数据位
                StopBits = StopBits.One, // 根据蠕动泵手册设置停止位
                Handshake = Handshake.None, // 通常蠕动泵不需要握手协议
                ReadTimeout = 500, // 设置读取超时（可选）
                WriteTimeout = 500 // 设置写入超时（可选）
            };


            // 打开串口
            serialPort.Open();
            Console.WriteLine("串口已打开");
            // 发送开始指令
            //01 0F 03 E7 00 01 01 01 DB 72
            byte[] commandbegin = new byte[] { 0x01, 0x0F, 0x03, 0xE7, 0x00, 0x01, 0x01, 0x00, 0xDB, 0x72 };

            serialPort.Write(commandbegin, 0, commandbegin.Length);
            Console.WriteLine("指令已发送");

            string response = serialPort.ReadExisting(); // 这将读取当前可用的所有数据
            if (!string.IsNullOrEmpty(response))
            {
                Console.WriteLine("蠕动泵响应: " + response);
            }
            else
            {
                Console.WriteLine("未收到蠕动泵响应");
            }
        }
        //List<byte> lstBB = new List<byte>();
        //lstBB.Add(0x01);
        //lstBB.Add(0x06);
        //lstBB.Add(0x03);
        //lstBB.Add(0xE7);
        //lstBB.Add(0x00);
        //lstBB.Add(0xC8);
        //lstBB.Add(0x38);
        //lstBB.Add(0x2F);
    }
}
